昨天,我們了解了 Trigger 、RSS Read 和Gmail 節點。我們掌握了每一樣工具的獨立用法,但也留下了一個巨大的懸念:如何將它們串連起來,並解決一次湧入 40 條新聞的問題?這就是今天要解決的問題!
今天的任務是:將昨天 RSS
節點獲取的 40 則新聞,全部彙整成一封郵件,並送到你的信箱。在今天的文章中,我們將:
今天的目標是打造一條流水線,從定時觸發、獲取新聞、彙整內容,到最後寄送郵件,一氣呵成,就像下面這張圖一樣。
準備好見證 n8n 的真正魔力了嗎?讓我們開始吧!
還記得昨天在測試 Gmail
節點時,我特別提醒大家:「記得先斷開兩個節點之間的連線」。當時我沒有多解釋,只是留下了一個懸念,就像電影結尾的彩蛋一樣。你是不是也很好奇,如果當時我們沒有斷開,直接把 RSS Read
和 Gmail
連在一起並按下執行,會發生什麼宇宙大爆炸的事件?今天,就讓我們來滿足這份好奇心並解釋會發生什麼事。
如果真的想親自嘗試看看會發生什麼事,可以打開前一天的工作流,將 RSS read
節點的輸出端,勇敢地拉一條線連接到 Gmail
節點的輸入端。
接著,點開 Gmail
節點,填寫 To(收件人)、 Subject (主旨) 欄位、Message(內文),然後深呼吸... 按下右下角的「Execute Workflow」
請務必確認 To (收件人) 欄位是你自己的信箱,否則你填的那個人的信箱可能會在接下來的 30 秒內,收到非常多封來自你的神秘郵件騷擾!
你的手機是不是開始瘋狂震動?信箱是不是瞬間被幾十封新郵件淹沒了?
如果你真的這麼做了,恭喜你!你剛剛親身體驗了 n8n 最核心、也最需要被理解的運作機制——自動迴圈 (Automatic Looping)。
上面這個截圖就是昨天我讓它傳了40封的截圖
這場「郵件轟炸」背後的原因,正是 n8n 一個「貼心卻也危險」的預設機制。當 n8n 偵測到有 40 條新聞 ( items ) 從 RSS read
節點送過來時,它預設的處理方式是 「一個一個來,確保每份都處理到」。也就是說,它會把 Gmail
節點重複執行 40 次,因此每一次都寄出一封信!(等等會提到避免的方法)
這個有趣的(也可能是災難性的)實驗,完美地揭示了我們今天的核心挑戰:如何馴服這條過度熱情的自動化生產線,讓它將 40 份食材,完美地打包成「一份」精美的料理再送出?
在 n8n 的智慧廚房中,當我們需要對節點輸出的資料進行整理、篩選、合併或轉換時,通常會請出三位「數據處理大師」。
在 n8n 的節點中,有三款功能強大的資料處理節點,專門用來處理複雜的資料:
Merge
節點 (分支合併器):用於將兩條分支的資料打包在一起
想像你在同時燉一鍋湯、又烤一個麵包。當兩道菜都準備好時,你需要一個「上菜托盤」把它們組合在一起,變成一份套餐。
Merge
節點就是這個托盤,專門用來合併來自不同流程分支的資料。
Aggregate
節點 (清單彙總器)
這就像現實生活中負責把很多商品進行打包的工作。它的主要工作,是將大量送來的、零散的食材(多個 Item),根據你的指令,分門別類地打包進一個新的大箱子(單一 Item)。
Merge 和 Aggregate 都是在做合併、整合,但最大的差異是來源,如果來源只有一條,通常用Aggregate;有兩條以上,就用 Merge。也可以混合使用,後續的文章中會有範例。
Edit Fields
(Set) 節點 (萬能調理台)
這是我們今天的主角,也是廚房裡最常用、最萬能的「中央調理台」或「食物處理機」。它能對同一批送來的食材,進行切割、塑形、重新標籤、混合打包等所有你想得到的處理。
一句話總結:Merge 合併不同來源,Aggregate 多筆資料合成一個列表,而 Edit Fields 則處理同一批資料的內部轉換、篩選、調整。
對於今天「將 40 則新聞打包成一封信」的任務,我們今天會用到的是 Edit Fields
節點!
Edit Fields
節點:操作面板現在,讓我們在 RSS Read
和 Gmail
節點之間添加一個 Edit Fields 的節點。點開它,來認識一下它的操作面板。
它主要有兩個核心設定:
Mode
(操作模式):
Manual Mapping
(手動設定):這是最常用的模式,就像調理機的「手動面板」。你可以非常直觀地「新增欄位 (Add Field)」,告訴它你要創造什麼新資料 (Key),以及內容是什麼 (Value)。這也是我們今天要用的模式。
JSON
:這種模式可以讓你直接用 JSON 語法,來定義節點最終要輸出的完整資料結構。這個比較適合熟悉JSON格式的人,後續如果時間足夠,會在提到。Fields to Set
(要設定的欄位):
Manual Mapping
模式下,這裡就是你要設定輸出欄位的地方,你可以在此新增多個欄位,來一步步完成你的資料調理工作。Edit Fields
節點設定實作:節點的設定方式,會依據需求、習慣來有不同的設定方式。今天的範例,我們將透過Edit Fields節點截取出每一條新聞的標題以及新聞連結,然後全部合併在一起
先講設定方式,等一下再來講解:
{{ $items("RSS Read").map(item => {return `標題:${item.json.title} \n 連結:${item.json.link}\n`; }).join('\n') }}
理論上會像上面的截圖一樣綠綠的,而且格子底下會出現資料的預覽。
Execute Once 就是讓這個節點在 input 不管有幾個 item,就只會執行一次。所以其實今天最剛開始遇到Gmail 一次寄 40 封的信,也可以用這種方式調整、避免。
在這裡,我們用了一小段程式碼來處理我們要的格式。我知道,當你第一次看到這段由 $
、{}
、=>
組成的「咒語」時,可能會覺得有點嚇人。
但別擔心!它其實就是我們在對 n8n 這位超高效率的「廚房助理」,下達一連串非常具體的指令。讓我們把這段指令,一個動作一個動作地拆解開來:
$items("RSS Read")
.map(item => {...})
.map()
是處理陣列資料的超能力。你可以把它理解成「逐一處理、轉換格式」的指令。它會拿起第一份食材,處理完,放到一個新籃子裡;再拿起第二份,處理完,也放到新籃子裡...直到全部處理完畢。{ }
內的內容就是要針對目標要怎麼處理(下面第三點)return....;
return
就是處理之後要回傳什麼。而反引號搭配 ${}
的寫法,是一種可以輕鬆在文字中插入變數的語法,\n
則是程式碼中的「換行符」。.join('\n\n')
.join()
就是「打包組合」的指令。它會把 .map()
處理完的所有結果(那 40 張便利貼),用你指定的「膠水」(這裡是用兩個換行符 \n\n
來製造段落間隔)全部串接成單一的一大段文字。昨天有提到,JSON 的全名是 JavaScript Object Notation。它的名字裡就藏著祕密——它和強大的程式語言 JavaScript 系出同源,是天生的好朋友。
而 n8n 裡的資料幾乎都是以 JSON 格式表達,因此通常都使用 JavaScript 的語法來對這些資料進行各種靈活、強大的批次處理。
在我們設定某些節點的參數時,你可能會發現當你把滑鼠移到欄位上時,旁邊會出現一個可以切換的 Fixed | Expression
按鈕。
這就是 n8n 中傳達參數的兩種核心方式,讓我們來徹底搞懂它:
Fixed
模式非常單純,就是「你輸入什麼,它就是什麼」,是一個靜態、寫死的值。Gmail
節點的 To
(收件人) 欄位,你直接輸入自己的信箱 myemail@gmail.com
。Subject
(主旨) 欄位,你直接輸入文字 【每日新聞摘要】
。Fixed
值,無論工作流執行多少次,這些內容永遠不會改變。Expression
模式是 n8n 的靈魂所在!它允許你動態地從前面節點的輸出結果中,抓取資料來填入目前的欄位。這讓你的工作流變得「聰明」且「靈活」。Expression
來抓取 Edit Fields
節點處理好的結果。Expression 的資料輸入方式會有兩種,一種是手動去打,語法可以參考下面C點或可以請AI幫忙生成;另一種方式則是在資料為 schema 檢視狀態的時候,直接用滑鼠拖拉過去,等等會實作
要使用這個魔法便條,我們需要學會它的「咒語格式」。其實非常簡單,只有三個核心符號:
{{ ... }}
- 魔法信封
$
- 「開始取貨!」的信號
$
符號,就代表「接下來我們要開始引用某個節點的資料了」。它是所有資料引用的起點。常見的像是 $json
(存取當前 Item 的 JSON 內容) 或 $items()
(存取前面指定節點的所有 Items)。.
- 「進入下一層」的指令
.
(點) 就是用來進入下一層的路徑指標。在 Expression 模式下,只有 {{ }} 裡面的內容是動態的,信封外的和 Fixed 會是一樣的效果,如下圖。如果語法正確、有獲取資料,會以綠色顯示;失敗則為紅色。如下圖
將 Set
節點連接到 Gmail
節點。此時如果左邊沒有 input 資料,可以先把前面的節點執行過一次(也可以用圖釘功能釘選起來)
收件人先寫自己的信箱、主旨可以先自定、Email Type 選擇 Text
重頭戲來了,這時候 INPUT 切換成 Schema 檢視模式之後,可以把我們要的「email_text」直接拉到 Message 內文之中。(滑鼠左鍵按著拖拉過去,示意圖如下面的gif,可能有點糊)
執行節點,會發現手機就會收到該信件了。如下圖
將工作流中的最開頭的「Manual Trigger」換成「Schedule Trigger」
設定「Schedule Trigger 」的各種參數:
Trigger Interval 選不同的週期,會有不同的細節要設定,上面第二~第四是在 Interval 為Day的情況下可設定的值
右上角存檔後,把「inactive」切換成「active」,就成功囉!
可以設一個離自己比較近的時間,測試是否有成功在安排的指定時間執行
最終完成的結果:
昨天提到很多新聞媒體都有提供RSS,文章中的範例用的是自由時報的即時新聞,但世界上的食材供應商何其多!你可以試著:
今天的做法我們是將新聞標題、連結全部整理起來,但其實也可以有多種變化:
content
或 description
欄位。(自由時報的是content
欄位)可以試著把它也加入到你的信件內容中,讓你不只獲得標題和連結,而是獲得新聞內容。.map()
之前,你可以先用 .slice(0, 10)
這個 JavaScript 技巧,只取出前 10 則新聞來處理。(後續有機會會提到)可以試著上網找找看,或問問AI 如何修改 Edit Fields 表達式,讓你的 Email 內容變得更漂亮、或只顯示前 5 則新聞的摘要。
今天,我們學會了如何用 Edit Fields(Set) 節點,把 n8n 多筆資料整理成一份漂亮的成果。同時也了解了參數的設定方式、這是一個非常關鍵的技能,因為未來你會經常遇到「一堆資料 → 要變成一個整合結果」的情境。
我們也實際將節點串接起來變成一到工作流,但到這邊,你可能會有一些疑問,例如 「這種純文字的信件好醜」 、 「這樣直接貼40則新聞好像有點雜」、「能不能將新聞內容進行摘要?」 。如果有這些問題,不急!我們會一一來解決!
明天,我們將把自動化再進一步升級: 不只是「打包新聞寄出」,而是開始學會如何篩選、分類、甚至加上 AI 的智慧處理。這樣你的 Email 就不只是「原封不動的資訊集合」,而是「一份更有價值的智慧摘要」。
準備好將你的純文字列表,升級成一份由 AI 為你量身打造的客製化電子報了嗎?千萬不要錯過!我們明天見!